package com.dc.designPattern._11_proxy.extend.extend2;

import lombok.Data;

import java.util.Objects;

/**
 * Description: 强制代理_被代理者_游戏玩家
 * @author: gdc
 * @date: 2021/6/24
 * @version 1.0
 */
@Data
public class GamePlayer implements IGamePlayer {

    /**
     * 用户名
     */
    private String name;

    /**
     * 代理对象
     */
    private IGamePlayer proxy;

    /**
     * 构造函数限制谁能创建对象，并同时传递姓名
     * @param name
     */
    public GamePlayer(String name) {
        this.name = name;
    }

    @Override
    public void login(String user, String pwd) {
        if (isProxy()) {
            System.out.println("登陆名：" + user + "的用户 " + getName() + " 完成登陆");
        } else {
            System.out.println("请使用指定的代理访问...");
        }
    }

    @Override
    public void killBoss() {
        if (isProxy()) {
            System.out.println(getName() + "，在打怪...");
        } else {
            System.out.println("请使用指定的代理访问...");
        }
    }

    @Override
    public void upgrade() {
        if (isProxy()) {
            System.out.println(getName() + ", 又升了一级...");
        } else {
            System.out.println("请使用指定的代理访问...");
        }
    }

    /**
     * 返回当前对象的代理对象
     * @return          代理对象
     */
    @Override
    public IGamePlayer getProxy() {
        this.proxy = new GamePlayerProxy(this);
        return this.proxy;
    }

    /**
     * 校验是否为代理对象访问
     * @return          结果
     */
    private boolean isProxy(){
        return Objects.nonNull(this.proxy);
    }
}
